home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / dev / asm / TBSource.lha / RingDetect / RD.bak < prev    next >
Text File  |  1993-07-02  |  31KB  |  1,569 lines

  1. *************************************************
  2. *                        *
  3. *        (C)opyright 1991-92        *
  4. *                        *
  5. *         by Tomi Blinnikka        *
  6. *                        *
  7. *    Don't try to understand the code    *
  8. *                        *
  9. * Version 0.01    30/12/1991            *
  10. *     -0.99ö                    *
  11. *                        *
  12. * Version 1.00    01/01/1992            *
  13. *                        *
  14. * BUGS:    Wrong year, debugging stuff left in    *
  15. *    in prog.                *
  16. *                        *
  17. * Version 1.01    01/01/1992            *
  18. *                        *
  19. * BUGS:    GetLength made an enforcer hit        *
  20. *    with illegal pointer. Fixed.        *
  21. *    Load bug (atleast partly) fixed.    *
  22. *                        *
  23. * Version 1.02    13/01/1992            *
  24. *                        *
  25. * BUGS:    Didn't work with all modems        *
  26. *                        *
  27. * Version 1.03    15/03/1992            *
  28. *                        *
  29. * BUGS:    All version up to here didn't get RING    *
  30. *    properly.                *
  31. *                        *
  32. * Version 1.04    31/05/1992            *
  33. *                        *
  34. * BUGS:    Version string not according to     *
  35. *    style guide. Might have had debugging    *
  36. *    stuff left in again. Couldn't have a    *
  37. *    comment after name and options.        *
  38. *                        *
  39. * Version 1.05    07/06/1992            *
  40. *                        *
  41. * BUGS:                        *
  42. *                        *
  43. * Version 1.06    09/06/1992            *
  44. *                        *
  45. * Added ",13," back. Added RingCounter.        *
  46. *                        *
  47. *************************************************
  48.  
  49.     INCLUDE    "JMPLibs.i"
  50.     INCLUDE    "exec/types.i"
  51.     INCLUDE    "exec/nodes.i"
  52.     INCLUDE    "exec/lists.i"
  53.     INCLUDE    "exec/ports.i"
  54.     INCLUDE    "exec/memory.i"
  55.     INCLUDE    "exec/devices.i"
  56.     INCLUDE    "exec/io.i"
  57.     INCLUDE    "exec/tasks.i"
  58.     INCLUDE    "libraries/dosextens.i"
  59.     INCLUDE    "libraries/dos.i"
  60.     INCLUDE    "devices/serial.i"
  61.     INCLUDE    "libraries/gadtools.i"
  62.     INCLUDE "workbench/startup.i"
  63.  
  64.     INCLUDE    "XREF:2.0.xref"
  65.     INCLUDE    "XREF:intuition.xref"
  66.     INCLUDE    "XREF:exec.xref"
  67.     INCLUDE    "XREF:dos.xref"
  68.     INCLUDE    "XREF:icon.xref"
  69.  
  70.     XREF    _CreatePort
  71.     XREF    _DeletePort
  72.     XREF    _CreateExtIO
  73.     XREF    _DeleteExtIO
  74.  
  75.     XDEF    _DOSBase
  76.     XDEF    _SysBase
  77.  
  78. DIntuition    set    1
  79.  
  80. RingTop:    EQU    2
  81. OptionTop:    EQU    56
  82.  
  83. TRUE:        EQU    1
  84.  
  85.         section    RD,CODE
  86.  
  87.         push    d2-d7/a2-a6
  88.         push    d0/a0
  89.  
  90.         sub.l    a1,a1            ;Find our task
  91.         lib    Exec,FindTask
  92.         move.l    d0,OurTask
  93.         move.l    d0,a4
  94.         move.l    pr_CLI(a4),d0
  95.         bne    OpenDos
  96.  
  97.         add.l    #8,sp
  98.         lea.l    pr_MsgPort(a4),a0
  99.         lib    Exec,WaitPort
  100.         lea.l    pr_MsgPort(a4),a0
  101.         lib    Exec,GetMsg
  102.         move.l    d0,WBMsg
  103.  
  104. OpenDos:    openlib    Dos,NoDos        ;Keep at beginning
  105.  
  106.         tst.l    WBMsg
  107.         beq    CLIStart
  108.  
  109.         lea.l    NILName,a0
  110.         move.l    a0,d1
  111.         move.l    #MODE_NEWFILE,d2
  112.         lib    Dos,Open
  113.         move.l    d0,NILFile
  114.         beq    ShutDown
  115.         move.l    NILFile,_stdout
  116.         beq    NoNIL
  117.  
  118.         openlib    Icon,NoIcon
  119.  
  120.         move.l    WBMsg,a0
  121.         move.l    sm_ArgList(a0),a1
  122.         move.l    wa_Lock(a1),d1
  123.         lib    Dos,CurrentDir
  124.         move.l    d0,OldLock
  125.  
  126.         move.l    WBMsg,a0
  127.         move.l    sm_ArgList(a0),a1
  128.         move.l    wa_Name(a1),a0
  129.         lib    Icon,GetDiskObject
  130.         move.l    d0,DiskObject
  131.         beq    MainStart
  132.  
  133.         move.l    DiskObject,a4
  134.         move.l    $36(a4),a0        ;do_ToolTypes
  135.         lea.l    DEVICEText1,a1
  136.         lib    Icon,FindToolType
  137.         tst.l    d0
  138.         beq    DoToolType1
  139.         move.l    d0,SerName
  140.  
  141. DoToolType1:    move.l    $36(a4),a0        ;do_ToolTypes
  142.         lea.l    UNITText1,a1
  143.         lib    Icon,FindToolType
  144.         tst.l    d0
  145.         beq    DoToolType2
  146.         move.l    d0,a0
  147.         bsr    ConvASCII
  148.         tst.w    d0
  149.         beq    DoToolType2
  150.         move.w    d0,SerUnit
  151.  
  152. DoToolType2:    move.l    $36(a4),a0        ;do_ToolTypes
  153.         lea.l    ICONIFYText1,a1
  154.         lib    Icon,FindToolType
  155.         tst.l    d0
  156.         beq    DoToolType3
  157.         move.l    d0,a0
  158.         lea.l    YESText1,a1
  159.         lib    Icon,MatchToolValue
  160.         tst.l    d0
  161.         beq    DoToolType3
  162.         move.w    #1,Iconify
  163.  
  164. DoToolType3:
  165.         bra    MainStart
  166.  
  167. CLIStart:    lib    Dos,Output
  168.         move.l    d0,_stdout
  169.         pull    d0/a0
  170.         clr.b    -1(a0,d0.l)
  171.         cmp.b    #"?",(a0)
  172.         beq    Usage
  173.         cmp.w    #'-?',(a0)
  174.         beq    Usage
  175.         cmp.w    #'-h',(a0)
  176.         beq    Usage
  177.         cmp.w    #'-i',(a0)
  178.         bne    Cont0.2
  179.         move.w    #1,Iconify
  180.         add.l    #2,a0
  181.  
  182. Cont0.2:    bsr    ConvASCII
  183.         tst.w    d0
  184.         beq    Cont1
  185.         move.w    d0,SerUnit
  186. Cont1:        cmp.b    #32,(a0)        ;Test for space
  187.         bne    Cont1.01
  188.         add.l    #1,a0
  189.         bra    Cont1            ;Loop until no spaces
  190. Cont1.01:    cmp.b    #9,(a0)            ;Test for TAB
  191.         bne    Cont1.1
  192.         add.l    #1,a0
  193.         bra    Cont1.01        ;Loop until no spaces
  194. Cont1.1:    tst.b    (a0)
  195.         beq    Cont1.4
  196.         push    a0
  197. Cont1.2:    cmp.b    #32,(a0)        ;Test for spaces
  198.         beq    Cont1.3
  199.         cmp.b    #9,(a0)            ;Test for TAB
  200.         beq    Cont1.3
  201.         add.l    #1,a0
  202.         bra    Cont1.2
  203. Cont1.3:    clr.b    (a0)
  204.         pull    a0
  205.         move.l    a0,SerName
  206. Cont1.4:
  207.  
  208. MainStart:    move.l    _DosBase,_DOSBase
  209.         move.l    $4,_SysBase
  210.  
  211.         move.l    #37,d0
  212.         move.l    $4,a6
  213.         lea.l    _IntuitionLib,a1
  214.         jsr    _LVOOpenLibrary(a6)
  215.         move.l    d0,_IntuitionBase
  216.         beq    NoKS20
  217.  
  218.         openlib    GadTools,NoGadTools
  219.  
  220. ;Create reply port for serial.device (or modem0.device etc.)
  221.  
  222.         move.l    #0,-(sp)
  223.         pea    SRPortName        ;S(erial)R(eply)PortName
  224.         jsr    _CreatePort
  225.         add.l    #8,sp
  226.         move.l    d0,SRPort
  227.         beq    ShutDown
  228.  
  229. ;Create IOReq for serial.device (or for other device, but size is EXTSER)
  230.  
  231.         move.l    #IOEXTSER_SIZE,-(sp)
  232.         move.l    d0,-(sp)
  233.         jsr    _CreateExtIO
  234.          add.l    #8,sp
  235.         move.l    d0,IORequest
  236.         beq    NoIOReq
  237.  
  238. ;open serial.device
  239.  
  240.         move.l    SerName,a0
  241.         move.l    SerUnit,d0
  242.         move.l    IORequest,a1
  243.         move.b    #SERF_SHARED,IO_SERFLAGS(a1)
  244.         clr.l    d1                ;no flags
  245.         lib    Exec,OpenDevice
  246.         tst.l    d0
  247.         bne    NoSerial
  248.         move.w    #$1,SerOpen        ;just to tell if open
  249.  
  250. ;Set up first read request
  251.  
  252.         bsr    ResetSer
  253.         bsr    Reader
  254.  
  255.         bsr    LockPubScr
  256.         tst.l    PubScreen
  257.         beq    NoPubScreen
  258.  
  259. ;Get visualinfo
  260.  
  261.         move.l    PubScreen,a0
  262.         sub.l    a1,a1
  263.         lib    GadTools,GetVisualInfoA
  264.         move.l    d0,vi
  265.  
  266. ;Make gadget stuff
  267.  
  268.         lea.l    glist,a0
  269.         lib    GadTools,CreateContext
  270.         move.l    d0,ContextGad2
  271.         beq    NoContextGad
  272.  
  273.         move.l    glist,a0
  274.         lea.l    NGOnOffGad1,a1
  275.         move.l    #CHECKBOX_KIND,d0
  276.         move.l    vi,gng_VisualInfo(a1)
  277.         lea.l    GadTagList,a2
  278.         lib    GadTools,CreateGadgetA
  279.  
  280.         move.l    d0,OnOffGad1
  281.         move.l    d0,a0
  282.         or.w    #RELVERIFY,gg_Activation(a0)
  283.         add.w    d5,gg_TopEdge(a0)
  284.  
  285.         lea.l    NGSTFGad1,a1
  286.         move.l    #CHECKBOX_KIND,d0
  287.         move.l    vi,gng_VisualInfo(a1)
  288.         lea.l    GadTagList,a2
  289.         lib    GadTools,CreateGadgetA
  290.  
  291.         move.l    d0,STFGad1
  292.         move.l    d0,a0
  293.         or.w    #RELVERIFY,gg_Activation(a0)
  294.         add.w    d5,gg_TopEdge(a0)
  295.  
  296.         lea.l    NGDBGad1,a1
  297.         move.l    #CHECKBOX_KIND,d0
  298.         move.l    vi,gng_VisualInfo(a1)
  299.         lea.l    GadTagList,a2
  300.         lib    GadTools,CreateGadgetA
  301.  
  302.         move.l    d0,DBGad1
  303.         move.l    d0,a0
  304.         or.w    #RELVERIFY,gg_Activation(a0)
  305.         add.w    d5,gg_TopEdge(a0)
  306.  
  307.         lea.l    NGSaveGad,a1
  308.         move.l    #BUTTON_KIND,d0
  309.         move.l    vi,gng_VisualInfo(a1)
  310.         lea.l    GadTagList,a2
  311.         lib    GadTools,CreateGadgetA
  312.  
  313.         move.l    d0,a0
  314.         move.l    a0,SaveGad1
  315.         or.w    #RELVERIFY,gg_Activation(a0)
  316.         add.w    d5,gg_TopEdge(a0)
  317.  
  318.         lea.l    NGQuitGad,a1
  319.         move.l    #BUTTON_KIND,d0
  320.         move.l    vi,gng_VisualInfo(a1)
  321.         lea.l    GadTagList,a2
  322.         lib    GadTools,CreateGadgetA
  323.  
  324.         move.l    d0,a0
  325.         move.l    a0,QuitGad1
  326.         or.w    #GRELRIGHT,gg_Flags(a0)
  327.         add.w    d5,gg_TopEdge(a0)
  328.  
  329.         lea.l    NGCmdGad1,a1
  330.         move.l    #CHECKBOX_KIND,d0
  331.         move.l    vi,gng_VisualInfo(a1)
  332.         lea.l    GadTagList,a2
  333.         lib    GadTools,CreateGadgetA
  334.  
  335.         move.l    d0,CmdGad1
  336.         move.l    d0,a0
  337.         add.w    d5,gg_TopEdge(a0)
  338.  
  339.         lea.l    NGCountGad1,a1
  340.         move.l    #TEXT_KIND,d0
  341.         move.l    vi,gng_VisualInfo(a1)
  342.         lea.l    CountGadTagList,a2
  343.         lib    GadTools,CreateGadgetA
  344.  
  345.         move.l    d0,CountGad1
  346.         move.l    d0,a0
  347.         add.w    d5,gg_TopEdge(a0)
  348.  
  349.         lea.l    NGCmdStrGad1,a1
  350.         move.l    #STRING_KIND,d0
  351.         move.l    vi,gng_VisualInfo(a1)
  352.         lea.l    CmdStrGadTagList,a2
  353.         lib    GadTools,CreateGadgetA
  354.  
  355.         move.l    d0,CmdStrGad1
  356.         move.l    d0,a0
  357.         move.l    $22(a0),a1
  358.         move.l    (a1),CmdStrGadBuf1
  359.         or.w    #GADGIMMEDIATE!RELVERIFY,gg_Activation(a0)
  360.         add.w    d5,gg_TopEdge(a0)
  361.  
  362.         move.b    #1,GadMagic        ;Make worked OK
  363.  
  364. ;New style menu stuff
  365.  
  366.         lea.l    MNProjectMenu1,a0
  367.         lea.l    MenuTagList,a1
  368.         lib    GadTools,CreateMenusA
  369.         move.l    d0,mlist
  370.         beq    NoMenus
  371.  
  372.         move.l    mlist,a0
  373.         move.l    vi,a1
  374.         lea.l    MenuTagList,a2
  375.         lib    GadTools,LayoutMenusA
  376.         move.b    #1,MenuMagic
  377.  
  378. ;Read preferences
  379.  
  380.         bsr    Load
  381.  
  382.         bsr    OpenWin1
  383.         tst.l    Window1
  384.         beq    NoWindow1
  385.  
  386. ;Unlock PubScreen
  387.  
  388.         sub.l    a0,a0
  389.         move.l    PubScreen,a1
  390.         lib    Intuition,UnlockPubScreen
  391.         clr.l    PubScreen
  392.  
  393. Window1IDCMP:    move.l    Window1,a0
  394.         bsr    CheckIDCMP
  395.         tst.l    d0
  396.         beq    Ring
  397.         cmp.l    #CLOSEWINDOW,d2
  398.         beq    ShutDown
  399.         cmp.l    #GADGETUP,d2
  400.         beq    DoGads
  401.         cmp.l    #MENUPICK,d2
  402.         beq    Win1Menus
  403.         cmp.l    #VANILLAKEY,d2
  404.         beq    VanillaKeys
  405.         bra    Window1IDCMP
  406.  
  407. Win1Menus:    bsr    MenuNull
  408.         cmp.w    #$00,d6
  409.         beq    Win1Menus1
  410.         cmp.w    #$01,d6
  411.         beq    Win1Menus2
  412.         bra    Window1IDCMP
  413. Win1Menus1:    cmp.w    #$00,d5
  414.         beq    DoLoad
  415.         cmp.w    #$01,d5
  416.         beq    Save
  417.         cmp.w    #$02,d5
  418.         beq    About
  419.         cmp.w    #$04,d5
  420.         beq    ShutDown
  421.         bra    Window1IDCMP
  422.  
  423. Win1Menus2:    cmp.w    #$00,d5
  424.         beq    DoResetCount
  425.         bra    Window1IDCMP
  426.  
  427. DoResetCount:    clr.w    RingCount
  428.         bsr    RefreshCount
  429.         bra    Window1IDCMP
  430.  
  431. DoLoad:        bsr    RemGads
  432.         bsr    Load
  433.         bsr    AddGads
  434.         move.l    #5,d1
  435.         lib    Dos,Delay
  436.         bra    ActivateGads
  437.  
  438. VanillaKeys:    cmp.w    #$1b,d3
  439.         beq    ShutDown
  440.         cmp.w    #'s',d3            ;Lower case
  441.         beq    Save
  442.         cmp.w    #'q',d3
  443.         beq    ShutDown
  444.         cmp.w    #'c',d3
  445.         beq    ActivateGads
  446.         cmp.w    #'S',d3            ;Upper case
  447.         beq    Save
  448.         cmp.w    #'Q',d3
  449.         beq    ShutDown
  450.         cmp.w    #'C',d3
  451.         beq    ActivateGads
  452.         bra    Window1IDCMP
  453.  
  454. DoGads:        cmp.w    #1,$26(a5)
  455.         beq    ActivateGads
  456.         cmp.w    #10,$26(a5)
  457.         beq    Save
  458.         cmp.w    #20,$26(a5)
  459.         beq    ShutDown
  460.         bra    Window1IDCMP
  461.  
  462. ActivateGads:    move.l    CmdStrGad1,a0
  463.         move.l    Window1,a1
  464.         sub.l    a2,a2
  465.         lib    Intuition,ActivateGadget
  466.         bra    Window1IDCMP
  467.  
  468. ActGad:        move.l    CmdStrGad1,a0
  469.         move.l    Window1,a1
  470.         sub.l    a2,a2
  471.         lib    Intuition,ActivateGadget
  472.         rts
  473.  
  474. Load:        lea.l    PrefsName,a0
  475.         move.l    a0,d1
  476.         move.l    #MODE_OLDFILE,d2
  477.         lib    Dos,Open
  478.         move.l    d0,PrefsFile
  479.         beq    Load_ERR1
  480.  
  481.         move.l    PrefsFile,d1
  482.         lea.l    Prefs,a0
  483.         move.l    a0,d2
  484.         move.l    #2,d3
  485.         lib    Dos,Read
  486.         cmp.l    #2,d0
  487.         bne    Load_ERR2
  488.  
  489.         cmp.w    #'RD',Prefs
  490.         bne    Load_ERR3
  491.  
  492.         move.l    PrefsFile,d1
  493.         add.l    #2,d2
  494.         move.l    #PrefsSize-2,d3
  495.         lib    Dos,Read
  496.         cmp.l    #PrefsSize-2,d0
  497.         bne    Load_ERR2
  498.  
  499. Load_OUT0.1:    move.l    PrefsFile,d1
  500.         lib    Dos,Close
  501.         clr.l    PrefsFile
  502.  
  503. Load_OUT:    bsr    SetModes
  504.         rts
  505.  
  506. Load_ERR1:    lea.l    File_ERRTxt1,a1
  507.         bsr    DoAutoRequest
  508.         bra    Load_OUT
  509.  
  510. Load_ERR2:    lea.l    File_ERRTxt2,a1
  511.         bsr    DoAutoRequest
  512.         bra    Load_OUT0.1
  513.  
  514. Load_ERR3:    lea.l    File_ERRTxt3,a1
  515.         bsr    DoAutoRequest
  516.         bra    Load_OUT0.1
  517.  
  518. Save:        bsr    CheckModes
  519.  
  520.         lea.l    PrefsName,a0
  521.         move.l    a0,d1
  522.         move.l    #MODE_NEWFILE,d2
  523.         lib    Dos,Open
  524.         move.l    d0,PrefsFile
  525.         beq    Save_ERR1
  526.  
  527.         move.w    #'RD',Prefs
  528.  
  529.         move.l    PrefsFile,d1
  530.         lea.l    Prefs,a0
  531.         move.l    a0,d2
  532.         move.l    #PrefsSize,d3
  533.         lib    Dos,Write
  534.         cmp.l    #PrefsSize,d0
  535.         bne    Save_ERR2
  536.  
  537. Save_OUT:    move.l    PrefsFile,d1
  538.         lib    Dos,Close
  539.         clr.l    PrefsFile
  540. Save_OUT1:    bra    ActivateGads
  541.  
  542. Save_ERR1:    lea.l    File_ERRTxt1,a1
  543.         bsr    DoAutoRequest
  544.         bra    Save_OUT1
  545.  
  546. Save_ERR2:    lea.l    File_ERRTxt2,a1
  547.         bsr    DoAutoRequest
  548.         bra    Save_OUT
  549.  
  550. About:        bsr    SleepPointer
  551.         bsr    MenusOff
  552.         bsr    RemGads
  553.  
  554.         move.l    Window1,a0
  555.         lea.l    AboutTxt1,a1
  556.         move.l    #$00,a2        ;positive text
  557.         lea.l    OKTxt,a3    ;a bit the wrong way around but...
  558.         move.l    #$00,d0
  559.         move.l    #$00,d1
  560.         move.l    #320,d2
  561.         move.l    #$50,d3
  562.         lib    Intuition,AutoRequest
  563.         bsr    AddGads
  564.         bsr    MenusOn
  565.         bsr    NormalPointer
  566.         bra    Window1IDCMP
  567.  
  568. Break:        lea.l    BreakText1,a0
  569.         bsr    Printer
  570.         move.l    #CLOSEWINDOW,d2        ;fake closewindow...
  571.         move.l    #-1,d0
  572.         rts
  573.  
  574. TestRing:    tst.w    BufCount
  575.         bne    TestRing2
  576.         cmp.b    #'R',Buffer1
  577.         bne    TestRing4
  578. TestRing2:    lea.l    Buffer2,a0
  579.         add.w    BufCount,a0
  580.         move.b    Buffer1,(a0)
  581.         add.w    #1,BufCount
  582.         cmp.w    #4,BufCount
  583.         bne    TestRing4
  584.         clr.w    BufCount
  585.         cmp.l    #'RING',Buffer2
  586.         bne    TestRing4
  587. TestRing3:    bsr    ClearSer
  588.         bsr    Reader
  589.         clr.l    d0            ;indicate ring
  590.         rts
  591. TestRing4:    bsr    ClearSer        ;Abort possible prev. read
  592.         bsr    Reader            ;Set up new read
  593.         move.l    #-1,d0
  594.         rts
  595.  
  596. TestSOL:    cmp.b    #13,(a0)
  597.         bne    TestSOL1
  598.         add.l    #1,a0
  599. TestSOL1:    cmp.b    #10,(a0)
  600.         bne    TestSOL2
  601.         add.l    #1,a0
  602. TestSOL2:    rts
  603.  
  604. Ring:        add.w    #1,RingCount
  605.         bsr    CheckModes
  606.         tst.b    PrefsOnOff
  607.         beq    Window1IDCMP
  608.         bsr    STF
  609.         bsr    DB
  610.         bsr    Cmd
  611.         bsr    RefreshCount
  612.         bra    Window1IDCMP
  613.  
  614. SetModes:    move.l    OnOffGad1,a0
  615.         and.w    #~SELECTED,gg_Flags(a0)
  616.         move.l    STFGad1,a0
  617.         and.w    #~SELECTED,gg_Flags(a0)
  618.         move.l    DBGad1,a0
  619.         and.w    #~SELECTED,gg_Flags(a0)
  620.         move.l    CmdGad1,a0
  621.         and.w    #~SELECTED,gg_Flags(a0)
  622.  
  623.         move.l    OnOffGad1,a0
  624.         tst.b    PrefsOnOff
  625.         beq    SetModes1
  626.         or.w    #SELECTED,gg_Flags(a0)
  627. SetModes1:    move.l    STFGad1,a0
  628.         tst.b    PrefsSTF
  629.         beq    SetModes2
  630.         or.w    #SELECTED,gg_Flags(a0)
  631. SetModes2:    move.l    DBGad1,a0
  632.         tst.b    PrefsDB
  633.         beq    SetModes3
  634.         or.w    #SELECTED,gg_Flags(a0)
  635. SetModes3:    move.l    CmdGad1,a0
  636.         tst.b    PrefsCmd
  637.         beq    SetModes4
  638.         or.w    #SELECTED,gg_Flags(a0)
  639. SetModes4:    lea.l    CmdBuffer,a0
  640.         move.l    CmdStrGadBuf1,a1
  641.         move.l    #32,d0
  642.         lib    Exec,CopyMem
  643.  
  644.         tst.l    Window1
  645.         beq    SetModes5
  646.         move.l    Window1,a0
  647.         move.w    Alt1XPos,d0
  648.         move.w    Alt1YPos,d1
  649.         move.w    wd_Width(a0),d2
  650.         move.w    wd_Height(a0),d3
  651.         lib    Intuition,ChangeWindowBox
  652.         rts
  653. SetModes5:    move.l    Alt1XPos,NewWindow1
  654.         rts
  655.  
  656. CheckModes:    move.l    OnOffGad1,a0
  657.         move.w    gg_Flags(a0),d0
  658.         clr.b    PrefsOnOff
  659.         and.w    #SELECTED,d0
  660.         cmp.w    #SELECTED,d0
  661.         bne    CheckModes1
  662.         move.b    #$01,PrefsOnOff
  663.  
  664. CheckModes1:    move.l    STFGad1,a0
  665.         move.w    gg_Flags(a0),d0
  666.         clr.b    PrefsSTF
  667.         and.w    #SELECTED,d0
  668.         cmp.w    #SELECTED,d0
  669.         bne    CheckModes2
  670.         move.b    #$01,PrefsSTF
  671.  
  672. CheckModes2:    move.l    DBGad1,a0
  673.         move.w    gg_Flags(a0),d0
  674.         clr.b    PrefsDB
  675.         and.w    #SELECTED,d0
  676.         cmp.w    #SELECTED,d0
  677.         bne    CheckModes3
  678.         move.b    #$01,PrefsDB
  679.  
  680. CheckModes3:    move.l    CmdGad1,a0
  681.         move.w    gg_Flags(a0),d0
  682.         clr.b    PrefsCmd
  683.         and.w    #SELECTED,d0
  684.         cmp.w    #SELECTED,d0
  685.         bne    CheckModes4
  686.         move.b    #$01,PrefsCmd
  687. CheckModes4:    move.l    CmdStrGadBuf1,a0
  688.         lea.l    CmdBuffer,a1
  689.         move.l    #32,d0
  690.         lib    Exec,CopyMem
  691.  
  692.         move.l    Window1,a0
  693.         move.l    wd_LeftEdge(a0),Alt1XY
  694.         rts
  695.  
  696. STF:        tst.b    PrefsSTF
  697.         beq    STF_OUT
  698.         move.l    Window1,a0
  699.         move.l    wd_Flags(a0),d0
  700.         and.l    #ZOOMED,d0
  701.         tst.w    Iconify
  702.         beq    STF1
  703.         cmp.l    #ZOOMED,d0
  704.         bne    STF2
  705.         bra    STF3
  706. STF1:        cmp.l    #ZOOMED,d0
  707.         bne    STF3
  708. STF2:        move.l    Window1,a0
  709.         lib    Intuition,ZipWindow
  710. STF3:        move.l    Window1,a0
  711.         move.l    $2e(a0),a0
  712.         lib    Intuition,ScreenToFront
  713.         move.l    Window1,a0
  714.         lib    Intuition,WindowToFront
  715.         move.l    Window1,a0
  716.         lib    Intuition,ActivateWindow
  717. STF_OUT:    rts
  718.  
  719. DB:        tst.b    PrefsDB
  720.         beq    DB_OUT
  721.         sub.l    a0,a0
  722.         lib    Intuition,DisplayBeep
  723. DB_OUT:        rts
  724.  
  725. Cmd:        tst.b    PrefsCmd
  726.         beq    Cmd_OUT
  727.         move.l    CmdStrGadBuf1,a0
  728.         tst.b    (a0)
  729.         beq    Cmd_OUT
  730.         move.l    a0,d1
  731.         clr.l    d2
  732.         clr.l    d3
  733.         lib    Dos,Execute
  734. Cmd_OUT:    rts
  735.  
  736. RemGads:    move.l    Window1,a0
  737.         move.l    OnOffGad1,a1
  738.         sub.l    a2,a2
  739.         move.l    #-1,d0
  740.         lib    Intuition,RemoveGList
  741.         rts
  742.  
  743. AddGads:    move.l    Window1,a0
  744.         move.l    OnOffGad1,a1
  745.         sub.l    a2,a2
  746.         move.l    #-1,d0
  747.         move.l    #-1,d1
  748.         lib    Intuition,AddGList
  749.  
  750.         move.l    OnOffGad1,a0
  751.         move.l    Window1,a1
  752.         sub.l    a2,a2
  753.         move.l    #-1,d0
  754.         lib    Intuition,RefreshGList
  755.  
  756.         move.l    Window1,a0
  757.         sub.l    a1,a1
  758.         lib    GadTools,GT_RefreshWindow
  759.         rts
  760.  
  761. RefreshCount:    lea.l    fstrl,a0        ;HEX->ASCII
  762.         lea.l    RingCount,a1        ;Number2Print
  763.         lea.l    PutChProc,a2
  764.         lea.l    CountText2,a3        ;Destination
  765.         lib    Exec,RawDoFmt
  766.  
  767.         move.l    Window1,a0
  768.         lea.l    CountText1,a1
  769.         lea.l    RDName1,a2
  770.         lib    Intuition,SetWindowTitles
  771.         rts
  772.  
  773. PutChProc:    tst.b    d0
  774.         beq    PutChProc_OUT
  775.         move.b    d0,(a3)+
  776. PutChProc_OUT:    rts
  777.  
  778. ClearSer:    clr.w    Buffer1
  779.         move.l    IORequest,a1
  780.         lib    Exec,CheckIO
  781.         tst.l    d0
  782.         beq    ClearSer1
  783.         move.l    IORequest,a1
  784.         lib    Exec,WaitIO
  785.  
  786. ClearSer1:    move.l    IORequest,a1
  787.         ABORTIO
  788.         move.l    IORequest,a1
  789.         lib    Exec,WaitIO
  790.         rts
  791.  
  792. Reader:        move.l    IORequest,a1
  793.         move.w    #CMD_READ,IO_COMMAND(a1)
  794.         move.l    #1,IO_LENGTH(a1)
  795.         lea.l    Buffer1,a0
  796.         move.l    a0,IO_DATA(a1)
  797.         lib    Exec,SendIO
  798.         rts
  799.  
  800. ResetSer:    move.l    IORequest,a1
  801.         move.w    #CMD_WRITE,IO_COMMAND(a1)
  802.         move.l    #5,IO_LENGTH(a1)
  803.         lea.l    ATText1,a0
  804.         move.l    a0,IO_DATA(a1)
  805.         lib    Exec,DoIO
  806.         rts
  807.  
  808. ShutDown:    tst.w    SerOpen
  809.         beq    ShutDown9000
  810.         bsr    ClearSer
  811.         move.l    IORequest,a1
  812.         lib    Exec,CloseDevice
  813.  
  814. ShutDown9000:    move.l    IORequest,d0
  815.         tst.l    d0
  816.         beq    ShutDown8000
  817.         move.l    #IOEXTSER_SIZE,-(sp)
  818.         move.l    d0,-(sp)
  819.         jsr    _DeleteExtIO
  820.         add.l    #8,sp
  821.  
  822. ShutDown8000:    move.l    SRPort,d0
  823.         tst.l    d0
  824.         beq    ShutDown7000
  825.         move.l    d0,-(sp)
  826.         jsr    _DeletePort
  827.         add.l    #4,sp
  828.  
  829. ShutDown7000:    tst.l    PubScreen
  830.         beq    ShutDown6000
  831.         sub.l    a0,a0
  832.         move.l    PubScreen,a1
  833.         lib    Intuition,UnlockPubScreen
  834.  
  835. ShutDown6000:    bsr    CloseWin1
  836.         bsr    Clean2.0Magic
  837.  
  838. ShutDown5000:    tst.l    PrefsFile
  839.         beq    ShutDown4000
  840.         move.l    PrefsFile,d1
  841.         lib    Dos,Close
  842.  
  843. ShutDown4000:    tst.l    NILFile
  844.         beq    ShutDown3000
  845.         move.l    NILFile,d1
  846.         lib    Dos,Close
  847.  
  848. ShutDown3000:    tst.l    DiskObject
  849.         beq    ShutDown2000
  850.         move.l    DiskObject,a0
  851.         lib    Icon,FreeDiskObject
  852.  
  853. ShutDown2000:    move.l    OldLock,d1
  854.         beq    ShutDown1050
  855.         lib    Dos,CurrentDir
  856.  
  857. ShutDown1050:    move.l    WBMsg,d2
  858.         beq    ShutDown1000
  859.         lib    Exec,Forbid
  860.         move.l    d2,a1
  861.         flib    Exec,ReplyMsg
  862.  
  863. ShutDown1000:    closlib    Icon
  864.         closlib    Intuition
  865.         closlib    GadTools
  866.         closlib    Dos
  867.         pull    d2-d7/a2-a6
  868.         clr.l    d0
  869.         rts
  870.  
  871. ;CheckIDCMP gets messages from serial.device, keyboard (CTRL_C) and Intuition.
  872. ;Give it the window structure in a0
  873.  
  874. CheckIDCMP:    move.l    $56(a0),a2        ;Get window's port
  875.         clr.l    d1            ;Set signals for
  876.         clr.l    d0
  877.         move.b    $0f(a2),d1        ;IntuiMessages,
  878.         bset.l    d1,d0
  879.         move.l    SRPort,a1        ;serial.device
  880.         move.b    MP_SIGBIT(a1),d1
  881.         bset.l    d1,d0
  882.         bset.l    #SIGBREAKB_CTRL_C,d0    ;and CTRL_C
  883.         lib    Exec,Wait
  884.  
  885.         cmp.l    #SIGBREAKF_CTRL_C,d0    ;If CTRL_C
  886.         beq    Break            ;go break
  887.         move.b    $0f(a2),d1        ;If not IDCMP
  888.         btst    d1,d0            ;go test for ring
  889.         beq    TestRing
  890.  
  891. C2GetMsg1:    move.l    a2,a0    
  892.         lib    GadTools,GT_GetIMsg
  893.         tst.l    d0
  894.         beq    C2GetMsg2
  895.     
  896.         move.l    d0,a1 
  897.         move.l    $14(a1),d2        ;answers with Class in d2,
  898.         move.w    $18(a1),d3        ;Code in d3 and
  899.         move.w    $1a(a1),a4        ;Qualifier in a4
  900.         move.l    $1c(a1),a5        ;IAddress in a5
  901.         lib    GadTools,GT_ReplyIMsg
  902.         bra    C2GetMsg1
  903. C2GetMsg2:    move.l    #-1,d0
  904.         rts
  905.  
  906. ;Newer MenuNull subroutine
  907.  
  908. MenuNull:    move.w    d3,d0
  909.         and.w    #$1f,d0
  910.         move.w    d0,d6
  911.         move.w    d3,d0
  912.         lsr.w    #5,d0
  913.         move.w    d0,d1
  914.         and.w    #$3f,d0
  915.         move.w    d0,d5
  916.         lsr.w    #6,d1
  917.         move.w    d1,d4
  918.         rts
  919.  
  920. SleepPointer:    move.l    Window1,a0
  921.         lea.l    ClockPointer1,a1
  922.         move.l    #16,d0
  923.         move.l    #16,d1            ;WHAT-THE-HECK IS THIS FOR?
  924.         move.l    #-6,d2
  925.         move.l    #0,d3
  926.         lib    Intuition,SetPointer
  927.         rts
  928.  
  929. NormalPointer:    move.l    Window1,a0
  930.         lib    Intuition,ClearPointer
  931.         rts
  932.  
  933. MenusOn:    move.l    Window1,a0
  934.         move.l    mlist,a1
  935.         lib    Intuition,SetMenuStrip
  936.         rts
  937.  
  938. MenusOff:    move.l    Window1,a0
  939.         lib    Intuition,ClearMenuStrip
  940.         rts
  941.  
  942. ;Lock PublicScreen
  943.  
  944. LockPubScr:    sub.l    a0,a0
  945.         lib    Intuition,LockPubScreen
  946.         move.l    d0,PubScreen
  947.         beq    LockPubScr_OUT
  948.  
  949. ;Get some sizes
  950.  
  951.         move.l    PubScreen,a0
  952.         move.b    sc_BarHeight(a0),d0
  953.         add.b    #1,d0
  954.         move.b    d0,BHeight+1
  955.         move.w    BHeight,d5
  956.         add.w    d5,SmallYSize
  957.         add.w    d5,WinYSize
  958. LockPubScr_OUT:    rts
  959.  
  960. ;Open Window
  961.  
  962. OpenWin1:    tst.w    Iconify
  963.         beq    OpenWin1.01
  964.         lea.l    NewWindow1,a0
  965.         and.l    #~ACTIVATE,nw_Flags(a0)
  966.         move.l    NewWindow1,ZoomXY
  967.         move.l    NewWindow1+4,ZoomXY+4
  968.         move.l    Alt1XY,nw_LeftEdge(a0)
  969.         move.w    #160,nw_Width(a0)
  970.         move.w    BHeight,nw_Height(a0)
  971. OpenWin1.01:    lea.l    NewWindow1,a0
  972.         lea.l    Win1TagList,a1
  973.         lib    Intuition,OpenWindowTagList
  974.         move.l    d0,Window1
  975.         beq    OpenWin1_ERR1
  976.         bsr    AddGads
  977.         bsr    RefreshCount
  978. OpenWin1.1:    move.l    Window1,a0
  979.         move.l    mlist,a1
  980.         lib    Intuition,SetMenuStrip
  981.         bsr    ActGad
  982.         move.l    #-1,d0
  983.         rts
  984. OpenWin1_ERR1:    clr.l    d0
  985.         rts        
  986.  
  987. CloseWin1:    tst.l    Window1
  988.         beq    CloseWin1_OUT
  989.         bsr    RemGads
  990. CloseWin1.1:    move.l    Window1,a0
  991.         lib    Intuition,ClearMenuStrip
  992.         move.l    Window1,a3
  993.         bsr    ClearMSGs
  994. CloseWin1_OUT:    clr.l    Window1
  995.         rts
  996.  
  997. ;ClearMsgs subroutine
  998. ;a3 = window structure
  999.  
  1000. ClearMSGs:    lib    Exec,Forbid
  1001.         move.l    Window1,a3
  1002.         move.l    $56(a3),a2
  1003. ClearMsg1:    move.l    a2,a0    
  1004.         flib    Exec,GetMsg
  1005.         tst.l    d0
  1006.         beq    ClearMsg2
  1007.         move.l    d0,a1 
  1008.         flib    Exec,ReplyMsg
  1009.         bra    ClearMsg1
  1010. ClearMsg2:    move.l    a3,a0
  1011.         lib    Intuition,CloseWindow
  1012.         lib    Exec,Permit
  1013. ClearMsg3:    rts
  1014.  
  1015. ;Get length of text in given address
  1016. ;
  1017. ;Input a1 = Address of null terminated text string
  1018. ;
  1019. ;Result d0 = Length
  1020.  
  1021. GetLength:    clr.l    d0
  1022.         cmp.l    #$00,a1        ;fixes enforcer hit
  1023.         beq    GetLength_OUT
  1024. GetLength2:    add.l    #1,d0
  1025.         tst.b    (a1)+
  1026.         bne    GetLength2
  1027.         sub.l    #1,d0        ;don't include NULL
  1028. GetLength_OUT:    rts
  1029.  
  1030.  
  1031. ConvASCII:    clr.l    d0
  1032.         clr.l    d1
  1033.         cmp.b    #' ',(a0)
  1034.         bne    ConvASCII2
  1035.         add.l    #1,a0
  1036. ConvASCII2:    move.b    (a0),d1
  1037.         cmp.b    #'0',d1
  1038.         bcs    ConvASCII_OUT
  1039.         cmp.b    #'9',d1
  1040.         bhi    ConvASCII_OUT
  1041.         sub.b    #'0',d1
  1042.         mulu.w    #10,d0
  1043.         add.l    d1,d0
  1044.         add.l    #1,a0
  1045.         bra    ConvASCII2
  1046. ConvASCII_OUT:    rts
  1047.  
  1048. Clean2.0Magic:    tst.b    GadMagic
  1049.         beq    Clean2.0M2
  1050.         move.l    glist,a0
  1051.         lib    GadTools,FreeGadgets
  1052.  
  1053. Clean2.0M2:    tst.b    MenuMagic
  1054.         beq    Clean2.0M3
  1055.         move.l    mlist,a0
  1056.         lib    GadTools,FreeMenus
  1057.  
  1058. Clean2.0M3:    tst.l    vi
  1059.         beq    Clean2.0_OUT
  1060.         move.l    vi,a0
  1061.         lib    GadTools,FreeVisualInfo
  1062.  
  1063. Clean2.0_OUT:    rts
  1064.  
  1065. ;Error etc. messages
  1066.  
  1067. Usage:        lea.l    UsageText1,a0
  1068.         bsr    Printer
  1069.         bra    ShutDown
  1070.  
  1071. NoDos:        add.l    #8,sp
  1072.         pull    d2-d7/a2-a6
  1073.         move.l    #RETURN_FAIL,d0
  1074.         rts
  1075.  
  1076. NoKS20:        lea.l    NoKS20Text1,a0
  1077.         bsr    Printer
  1078.         bra    ShutDown
  1079.  
  1080. NoGadTools:    lea.l    NoGTText1,a0
  1081.         bsr    Printer
  1082.         bra    ShutDown
  1083.  
  1084. NoNIL:        lea.l    NoNILText1,a0
  1085.         bsr    Printer
  1086.         bra    ShutDown
  1087.  
  1088. NoIcon:        lea.l    NoIconText1,a0
  1089.         bsr    Printer
  1090.         bra    ShutDown
  1091.  
  1092. NoIOReq:    lea.l    NoIOReqText1,a0
  1093.         bsr    Printer
  1094.         bra    ShutDown
  1095.  
  1096. NoSerial:    lea.l    NoSerialText1,a0
  1097.         bsr    Printer
  1098.         move.l    SerName,a0
  1099.         bsr    Printer
  1100.         lea.l    NoSerialText2,a0
  1101.         bsr    Printer
  1102.         bra    ShutDown
  1103.  
  1104. NoPubScreen:    lea.l    NoPubScrText1,a0
  1105.         bsr    Printer
  1106.         bra    ShutDown
  1107.  
  1108. NoWindow1:    lea.l    NoWindowText1,a0
  1109.         bsr    Printer
  1110.         bra    ShutDown
  1111.  
  1112. NoContextGad:    lea.l    NoContextText1,a0
  1113.         bsr    Printer
  1114.         bra    ShutDown
  1115.  
  1116. NoMenus:    lea.l    NoMenusText1,a0
  1117.         bsr    Printer
  1118.         bra    ShutDown
  1119.  
  1120. Printer:    printa    a0,_stdout
  1121.         rts
  1122.  
  1123. DoAutoRequest:    move.l    #$00,a2        ;positive text
  1124.         lea.l    OKTxt(pc),a3    ;a bit the wrong way around but...
  1125.         move.l    #$00,d0
  1126.         move.l    #$00,d1
  1127.         move.l    #$00,d2
  1128.         move.l    #$00,d3
  1129.         sub.l    a0,a0
  1130.         lib    Intuition,AutoRequest
  1131.         rts
  1132.  
  1133. ;Structures
  1134.  
  1135. ;GadTools stuff
  1136.  
  1137. vi:        dc.l    0        ;Visual Info
  1138. mlist:        dc.l    0
  1139. ContextGad2:    dc.l    0
  1140. GadMagic:    dc.b    0
  1141. MenuMagic:    dc.b    0
  1142.  
  1143. ;Gadgets
  1144.  
  1145. OnOffGad1:    dc.l    0
  1146. STFGad1:    dc.l    0
  1147. DBGad1:        dc.l    0
  1148. CmdGad1:    dc.l    0
  1149. SaveGad1:    dc.l    0
  1150. QuitGad1:    dc.l    0
  1151. CmdStrGad1:    dc.l    0
  1152. CmdStrGadBuf1:    dc.l    0        ;Only a pointer!
  1153. CountGad1:    dc.l    0
  1154.  
  1155. ;display stuff
  1156.  
  1157. PubScreen:    dc.l    0
  1158. Window1:    dc.l    0
  1159. BHeight:    dc.w    0
  1160. Iconify:    dc.w    0        ;(1 = Yes, please)
  1161.  
  1162. ;lib stuff
  1163.  
  1164. _SysBase:    dc.l    0
  1165. _DOSBase:    dc.l    0
  1166.  
  1167.         libnames
  1168.  
  1169. ;Other stuff, part I
  1170.  
  1171. OurTask:    dc.l    0
  1172. SRPort:        dc.l    0
  1173. IORequest:    dc.l    0
  1174. PrefsFile:    dc.l    0
  1175. NILFile:    dc.l    0
  1176. _stdout:    dc.l    0
  1177. WBMsg:        dc.l    0
  1178. DiskObject:    dc.l    0
  1179. OldLock:    dc.l    0
  1180. BufCount:    dc.w    0
  1181. RingCount:    dc.w    0
  1182.  
  1183. ;Serial device stuff
  1184.  
  1185. SerName:    dc.l    SerName2        ;A pointer!
  1186. SerUnit:    dc.l    0
  1187. SerOpen:    dc.w    0
  1188.  
  1189. ;Strings, error
  1190.  
  1191. BreakText1:    dc.b    "***Break",13,10,0
  1192. NoKS20Text1:    dc.b    "ERROR: You need Kickstart 2.0 or higher!",13,10,0
  1193. NoGTText1:    dc.b    "ERROR: Couldn't open gadtools.library!",13,10,0
  1194. NoNILText1:    dc.b    "ERROR: Couldn't open device NIL:!",13,10,0
  1195. NoIconText1:    dc.b    "ERROR: Couldn't open icon.library!",13,10,0
  1196. NoIOReqText1:    dc.b    "ERROR: Couldn't get SerialIOReq!",13,10,0
  1197. NoSerialText1:    dc.b    "ERROR: Couldn't open ",0
  1198. SerName2:    dc.b    "serial.device",0
  1199. NoSerialText2:    dc.b    10,0
  1200. NoPubScrText1:    dc.b    "ERROR: Couldn't lock PublicScreen",13,10,0
  1201. NoContextText1:    dc.b    "ERROR: Couldn't create context gadget",13,10,0
  1202. NoMenusText1:    dc.b    "ERROR: Couldn't allocate menus structure",13,10,0
  1203. NoWindowText1:    dc.b    "ERROR: Couldn't open Window",13,10,0
  1204. File_ERRText1:    dc.b    "Couldn't open file!",0
  1205. File_ERRText2:    dc.b    "File error!",0
  1206. File_ERRText3:    dc.b    "Incorrect file type!",0
  1207. ATText1:    dc.b    "ATZ",13,10,0
  1208.  
  1209. ;Strings, names
  1210.  
  1211. RDVersion:    dc.b    "$VER: "
  1212. UsageText1:    dc.b    "RingDetect 1.06 (10.6.92). (C)opyright Tomi Blinnikka 1992",13,10,13,10
  1213. ;        dc.b    10,"           !!! BETA TESTER VERSION !!!",13,10,13,10,13,10
  1214.         dc.b    "USAGE: RingDetect [-i] [Unit] [Device]",13,10,13,10
  1215.         dc.b    "       Where: [-i] iconify on startup",13,10
  1216.         dc.b    "              [Unit] is the unit number",13,10
  1217.         dc.b    "              [Device] is the device name",13,10,13,10
  1218.         dc.b    "       Default [Device] is serial.device",13,10,13,10
  1219.         dc.b    "Program indicates when your modem receives a RING-signal.",13,10
  1220.         dc.b    "See docs for more information.",13,10,0
  1221. SRPortName:    dc.b    "RingDetect port",0
  1222. OKText1:    dc.b    "OK",0
  1223. PrefsName:    dc.b    "ENVARC:RingDetect.PREFS",0
  1224. NILName:    dc.b    "NIL:",0
  1225. DEVICEText1:    dc.b    "DEVICE",0
  1226. UNITText1:    dc.b    "UNIT",0
  1227. ICONIFYText1:    dc.b    "ICONIFY",0
  1228. YESText1:    dc.b    "YES",0
  1229. AboutText1:    dc.b    "Name   : RingDetect",0
  1230. AboutText2:    dc.b    "Version: 1.06",0
  1231. AboutText3:    dc.b    "Author : Tomi Blinnikka",0
  1232. AboutText4:    dc.b    "   (C)opyright  1992",0
  1233. RDName1:    dc.b    "RingDetect",0
  1234. CountText1:    dc.b    "RD: "
  1235. CountText2:    dc.b    "    0 ",0
  1236. fstrl:        dc.b    "%5.d",0
  1237.         ds.l    0
  1238.  
  1239. ;New screen & new window structures
  1240.  
  1241. NewWindow1:    dc.w    200,31            ;X,Y POS
  1242.         dc.w    310            ;WIDTH
  1243. WinYSize:    dc.w    72            ;HEIGHT
  1244.         dc.b    0,1            ;PENS
  1245.         dc.l    CLOSEWINDOW!VANILLAKEY!MENUPICK!GADGETUP    ;IDCMP FLAGS
  1246.         dc.l    NOCAREREFRESH!WINDOWDRAG!WINDOWDEPTH!WINDOWCLOSE!ACTIVATE    ;FLAGS
  1247.         dc.l    0,0            ;GADGETS, CHECKMARK
  1248.         dc.l    CountText1        ;TITLE
  1249.         dc.l    0            ;SCREEN ADDRESS
  1250.         dc.l    0            ;BITMAP            
  1251.         dc.w    0,0,0,0            ;MIN/MAX SIZE
  1252.         dc.w    PUBLICSCREEN        ;TYPE
  1253.  
  1254. Win1TagList:    dc.l    WA_AutoAdjust,TRUE
  1255.         dc.l    WA_Zoom,ZoomXY
  1256.         dc.l    TAG_DONE,0
  1257.  
  1258. ZoomXY:
  1259. SmallXPos:    dc.w    10
  1260. SmallYPos:    dc.w    21
  1261. SmallXSize:    dc.w    160
  1262. SmallYSize:    dc.w    0
  1263.  
  1264. ;Fonts
  1265.  
  1266. Topaz:        dc.l    TopazName
  1267.         dc.w    8
  1268.         dc.b    0
  1269.         dc.b    0
  1270. TopazName:    dc.b    "topaz.font",0
  1271.         ds.l    0
  1272.  
  1273.  
  1274. ;ITextStructures
  1275.  
  1276. OKTxt:        dc.b    1,2            ;PENS
  1277.         dc.w    0            ;MODE
  1278.         dc.w    6,3            ;LEFT+TOPEDGE
  1279.         dc.l    0            ;FONT
  1280.         dc.l    OKText1            ;TEXT
  1281.         dc.l    0            ;NEXTTEXT
  1282.  
  1283. File_ERRTxt1:    dc.b    1,2            ;PENS
  1284.         dc.w    0            ;MODE
  1285.         dc.w    10,10            ;LEFT+TOPEDGE
  1286.         dc.l    0            ;FONT
  1287.         dc.l    File_ERRText1        ;TEXT
  1288.         dc.l    0            ;NEXTTEXT
  1289.  
  1290. File_ERRTxt2:    dc.b    1,2            ;PENS
  1291.         dc.w    0            ;MODE
  1292.         dc.w    10,10            ;LEFT+TOPEDGE
  1293.         dc.l    0            ;FONT
  1294.         dc.l    File_ERRText2        ;TEXT
  1295.         dc.l    0            ;NEXTTEXT
  1296.  
  1297. File_ERRTxt3:    dc.b    1,2            ;PENS
  1298.         dc.w    0            ;MODE
  1299.         dc.w    10,10            ;LEFT+TOPEDGE
  1300.         dc.l    0            ;FONT
  1301.         dc.l    File_ERRText3        ;TEXT
  1302.         dc.l    0            ;NEXTTEXT
  1303.  
  1304. AboutTxt1:    dc.b    1,2            ;PENS
  1305.         dc.w    0            ;MODE
  1306.         dc.w    0,0            ;LEFT+TOPEDGE
  1307.         dc.l    0            ;FONT
  1308.         dc.l    AboutText1        ;TEXT
  1309.         dc.l    AboutTxt2        ;NEXTTEXT
  1310.  
  1311. AboutTxt2:    dc.b    1,2            ;PENS
  1312.         dc.w    0            ;MODE
  1313.         dc.w    0,10            ;LEFT+TOPEDGE
  1314.         dc.l    0            ;FONT
  1315.         dc.l    AboutText2        ;TEXT
  1316.         dc.l    AboutTxt3        ;NEXTTEXT
  1317.  
  1318. AboutTxt3:    dc.b    1,2            ;PENS
  1319.         dc.w    0            ;MODE
  1320.         dc.w    0,20            ;LEFT+TOPEDGE
  1321.         dc.l    0            ;FONT
  1322.         dc.l    AboutText3        ;TEXT
  1323.         dc.l    AboutTxt4        ;NEXTTEXT
  1324.  
  1325. AboutTxt4:    dc.b    1,2            ;PENS
  1326.         dc.w    0            ;MODE
  1327.         dc.w    0,30            ;LEFT+TOPEDGE
  1328.         dc.l    0            ;FONT
  1329.         dc.l    AboutText4        ;TEXT
  1330.         dc.l    0 ;AboutTxt5        ;NEXTTEXT
  1331.  
  1332. ;Gadgets
  1333.  
  1334. OnOffGadText1:    dc.b    "On/Off",0
  1335. STFGadText1:    dc.b    "ScreenToFront",0
  1336. DBGadText1:    dc.b    "DisplayBeep",0
  1337. SaveGadText1:    dc.b    "_Save",0
  1338. QuitGadText1:    dc.b    "_Quit",0
  1339. CmdGadText2:    dc.b    "Command",0
  1340. CmdGadText1:    dc.b    "_Command",0
  1341.         ds.l    0
  1342.  
  1343. glist:        dcb.b    gg_SIZEOF,0
  1344.  
  1345. NGOnOffGad1:    dc.w    10        ;gng_LeftEdge
  1346.         dc.w    RingTop        ;gng_TopEdge
  1347.         dc.w    0        ;gng_Width
  1348.         dc.w    12        ;gng_Height
  1349.         dc.l    OnOffGadText1    ;gng_GadgetText
  1350.         dc.l    Topaz        ;gng_TextAttr
  1351.         dc.w    0        ;gng_GadgetID
  1352.         dc.l    PLACETEXT_RIGHT    ;gng_Flags
  1353.         dc.l    0        ;gng_VisualInfo
  1354.         dc.l    0        ;gng_UserData
  1355.  
  1356. NGSTFGad1:    dc.w    10        ;gng_LeftEdge
  1357.         dc.w    RingTop+13    ;gng_TopEdge
  1358.         dc.w    0        ;gng_Width
  1359.         dc.w    12        ;gng_Height
  1360.         dc.l    STFGadText1    ;gng_GadgetText
  1361.         dc.l    Topaz        ;gng_TextAttr
  1362.         dc.w    0        ;gng_GadgetID
  1363.         dc.l    PLACETEXT_RIGHT    ;gng_Flags
  1364.         dc.l    0        ;gng_VisualInfo
  1365.         dc.l    0        ;gng_UserData
  1366.  
  1367. NGDBGad1:    dc.w    10        ;gng_LeftEdge
  1368.         dc.w    RingTop+26    ;gng_TopEdge
  1369.         dc.w    0        ;gng_Width
  1370.         dc.w    12        ;gng_Height
  1371.         dc.l    DBGadText1    ;gng_GadgetText
  1372.         dc.l    Topaz        ;gng_TextAttr
  1373.         dc.w    0        ;gng_GadgetID
  1374.         dc.l    PLACETEXT_RIGHT    ;gng_Flags
  1375.         dc.l    0        ;gng_VisualInfo
  1376.         dc.l    0        ;gng_UserData
  1377.  
  1378. NGCmdGad1:    dc.w    10        ;gng_LeftEdge
  1379.         dc.w    RingTop+39    ;gng_TopEdge
  1380.         dc.w    0        ;gng_Width
  1381.         dc.w    12        ;gng_Height
  1382.         dc.l    CmdGadText2    ;gng_GadgetText
  1383.         dc.l    Topaz        ;gng_TextAttr
  1384.         dc.w    0        ;gng_GadgetID
  1385.         dc.l    PLACETEXT_RIGHT    ;gng_Flags
  1386.         dc.l    0        ;gng_VisualInfo
  1387.         dc.l    0        ;gng_UserData
  1388.  
  1389. NGSaveGad:    dc.w    10        ;gng_LeftEdge
  1390.         dc.w    OptionTop    ;gng_TopEdge
  1391.         dc.w    60        ;gng_Width
  1392.         dc.w    12        ;gng_Height
  1393.         dc.l    SaveGadText1    ;gng_GadgetText
  1394.         dc.l    Topaz        ;gng_TextAttr
  1395.         dc.w    10        ;gng_GadgetID
  1396.         dc.l    PLACETEXT_IN    ;gng_Flags
  1397.         dc.l    0        ;gng_VisualInfo
  1398.         dc.l    0        ;gng_UserData
  1399.  
  1400. NGQuitGad:    dc.w    -70        ;gng_LeftEdge
  1401.         dc.w    OptionTop    ;gng_TopEdge
  1402.         dc.w    60        ;gng_Width
  1403.         dc.w    12        ;gng_Height
  1404.         dc.l    QuitGadText1    ;gng_GadgetText
  1405.         dc.l    Topaz        ;gng_TextAttr
  1406.         dc.w    20        ;gng_GadgetID
  1407.         dc.l    PLACETEXT_IN    ;gng_Flags
  1408.         dc.l    0        ;gng_VisualInfo
  1409.         dc.l    0        ;gng_UserData
  1410.  
  1411. NGCmdStrGad1:    dc.w    160        ;gng_LeftEdge
  1412.         dc.w    RingTop+27    ;gng_TopEdge
  1413.         dc.w    128        ;gng_Width
  1414.         dc.w    12        ;gng_Height
  1415.         dc.l    CmdGadText1    ;gng_GadgetText
  1416.         dc.l    Topaz        ;gng_TextAttr
  1417.         dc.w    1        ;gng_GadgetID
  1418.         dc.l    PLACETEXT_BELOW    ;gng_Flags
  1419.         dc.l    0        ;gng_VisualInfo
  1420.         dc.l    0        ;gng_UserData
  1421.  
  1422. NGCountGad1:    dc.w    174        ;gng_LeftEdge
  1423.         dc.w    RingTop        ;gng_TopEdge
  1424.         dc.w    100        ;gng_Width
  1425.         dc.w    12        ;gng_Height
  1426.         dc.l    RDName1        ;gng_GadgetText
  1427.         dc.l    Topaz        ;gng_TextAttr
  1428.         dc.w    30        ;gng_GadgetID
  1429.         dc.l    PLACETEXT_IN!NG_HIGHLABEL    ;gng_Flags
  1430.         dc.l    0        ;gng_VisualInfo
  1431.         dc.l    0        ;gng_UserData
  1432.  
  1433. ;Gadget TagLists
  1434.  
  1435. CountGadTagList: dc.l    GT_Underscore,'_'
  1436.         dc.l    GTTX_Border,1
  1437.         dc.l    TAG_DONE,0
  1438.  
  1439. CmdStrGadTagList: dc.l    GTST_String,CmdBuffer
  1440.         dc.l    GT_Underscore,'_'
  1441.         dc.l    GTST_MaxChars,32
  1442.         dc.l    TAG_DONE,0
  1443.  
  1444. GadTagList:    dc.l    GT_Underscore,'_'
  1445.         dc.l    TAG_DONE,0
  1446. ;Menus
  1447.  
  1448. Menu1Name:    dc.b    "Project",0
  1449. LoadMenuText1:    dc.b    "Load",0
  1450. LoadCommKey:    dc.b    "L",0
  1451. SaveMenuText1:    dc.b    "Save",0
  1452. SaveCommKey:    dc.b    "S",0
  1453. AboutMenuText1:    dc.b    "About...",0
  1454. AboutCommKey:    dc.b    "?",0
  1455. QuitMenuText1:    dc.b    "Quit",0
  1456. QuitCommKey:    dc.b    "Q",0
  1457. Menu2Name:    dc.b    "Counter",0
  1458. ResetMenuText1:    dc.b    "Reset",0
  1459. ResetCommKey:    dc.b    "R",0
  1460.         ds.l    0
  1461.  
  1462. MNProjectMenu1:    dc.b    NM_TITLE        ;gnm_Type
  1463.         dc.b    0            ;gnm_Pad
  1464.         dc.l    Menu1Name        ;gnm_Label
  1465.         dc.l    0            ;gnm_CommKey
  1466.         dc.w    0            ;gnm_Flags
  1467.         dc.l    0            ;gnm_MutualExclude
  1468.         dc.l    0            ;gnm_UserData
  1469.  
  1470. MNLoad1:    dc.b    NM_ITEM            ;gnm_Type
  1471.         dc.b    0            ;gnm_Pad
  1472.         dc.l    LoadMenuText1        ;gnm_Label
  1473.         dc.l    LoadCommKey        ;gnm_CommKey
  1474.         dc.w    0            ;gnm_Flags
  1475.         dc.l    0            ;gnm_MutualExclude
  1476.         dc.l    0            ;gnm_UserData
  1477.  
  1478. MNSave1:    dc.b    NM_ITEM            ;gnm_Type
  1479.         dc.b    0            ;gnm_Pad
  1480.         dc.l    SaveMenuText1        ;gnm_Label
  1481.         dc.l    SaveCommKey        ;gnm_CommKey
  1482.         dc.w    0            ;gnm_Flags
  1483.         dc.l    0            ;gnm_MutualExclude
  1484.         dc.l    0            ;gnm_UserData
  1485.  
  1486. MNAbout1:    dc.b    NM_ITEM            ;gnm_Type
  1487.         dc.b    0            ;gnm_Pad
  1488.         dc.l    AboutMenuText1        ;gnm_Label
  1489.         dc.l    AboutCommKey        ;gnm_CommKey
  1490.         dc.w    0            ;gnm_Flags
  1491.         dc.l    0            ;gnm_MutualExclude
  1492.         dc.l    0            ;gnm_UserData
  1493.  
  1494. MNP1SepMenu1:    dc.b    NM_ITEM            ;gnm_Type
  1495.         dc.b    0            ;gnm_Pad
  1496.         dc.l    NM_BARLABEL        ;gnm_Label
  1497.         dc.l    0            ;gnm_CommKey
  1498.         dc.w    0            ;gnm_Flags
  1499.         dc.l    0            ;gnm_MutualExclude
  1500.         dc.l    0            ;gnm_UserData
  1501.  
  1502. MNQuit1:    dc.b    NM_ITEM            ;gnm_Type
  1503.         dc.b    0            ;gnm_Pad
  1504.         dc.l    QuitMenuText1        ;gnm_Label
  1505.         dc.l    QuitCommKey        ;gnm_CommKey
  1506.         dc.w    0            ;gnm_Flags
  1507.         dc.l    0            ;gnm_MutualExclude
  1508.         dc.l    0            ;gnm_UserData
  1509.  
  1510. MNCounterMenu1:    dc.b    NM_TITLE        ;gnm_Type
  1511.         dc.b    0            ;gnm_Pad
  1512.         dc.l    Menu2Name        ;gnm_Label
  1513.         dc.l    0            ;gnm_CommKey
  1514.         dc.w    0            ;gnm_Flags
  1515.         dc.l    0            ;gnm_MutualExclude
  1516.         dc.l    0            ;gnm_UserData
  1517.  
  1518. MNReset1:    dc.b    NM_ITEM            ;gnm_Type
  1519.         dc.b    0            ;gnm_Pad
  1520.         dc.l    ResetMenuText1        ;gnm_Label
  1521.         dc.l    ResetCommKey        ;gnm_CommKey
  1522.         dc.w    0            ;gnm_Flags
  1523.         dc.l    0            ;gnm_MutualExclude
  1524.         dc.l    0            ;gnm_UserData
  1525.  
  1526.         dc.w    0            ;NM_END?
  1527.  
  1528. ;Menu TagList(s)
  1529.  
  1530. MenuTagList:    dc.l    GTMN_Menu,MNProjectMenu1
  1531.         dc.l    TAG_DONE,0
  1532.  
  1533. ;Buffers
  1534.  
  1535. Buffer1:    dcb.b    2,0
  1536. Buffer2:    dcb.b    4,0
  1537.  
  1538. PREFS_START
  1539.  
  1540. Prefs:        dc.b    "RD"
  1541. PrefsOnOff:    dc.b    1
  1542. PrefsSTF:    dc.b    1
  1543. PrefsDB:    dc.b    1
  1544. PrefsCmd:    dc.b    0
  1545.  
  1546. Alt1XY:
  1547. Alt1XPos:    dc.w    200
  1548. Alt1YPos:    dc.w    31
  1549.  
  1550. CmdBuffer:    dcb.b    34,0
  1551.  
  1552. PREFS_END:    dc.l    0,0
  1553.  
  1554. PrefsSize:    EQU    (PREFS_END-PREFS_START)
  1555.  
  1556.         Section    RD,DATA,CHIP
  1557.  
  1558.         ds.w    0
  1559.  
  1560. ClockPointer1:    dc.w    $0000,$0000
  1561.         dc.w    $0400,$07C0,$0000,$07C0,$0100,$0380,$0000,$07E0
  1562.         dc.w    $07C0,$1FF8,$1FF0,$3FEC,$3FF8,$7FDE,$3FF8,$7FBE
  1563.         dc.w    $7FFC,$FF7F,$7EFC,$FFFF,$7FFC,$FFFF,$3FF8,$7FFE
  1564.         dc.w    $3FF8,$7FFE,$1FF0,$3FFC,$07C0,$1FF8,$0000,$07E0
  1565.         dc.w    $0000,$0000
  1566.  
  1567.         end
  1568.  
  1569.